//package com.example.waibao.Component;
//
//import com.example.waibao.entity.LoginUser;
//import com.example.waibao.utils.Jwtutil;
//import com.example.waibao.utils.RedisCache;
//import io.jsonwebtoken.Claims;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.core.MethodParameter;
//import org.springframework.stereotype.Component;
//import org.springframework.web.bind.support.WebDataBinderFactory;
//import org.springframework.web.context.request.NativeWebRequest;
//import org.springframework.web.method.support.HandlerMethodArgumentResolver;
//import org.springframework.web.method.support.ModelAndViewContainer;
//
//import javax.annotation.Resource;
//import java.util.Objects;
//
//@Component
//public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
//    @Resource
//    private Jwtutil tokenUtil;
//
//    @Autowired
//    private RedisCache redisCache;
//    @Override
//    public boolean supportsParameter(MethodParameter parameter) {
//        return parameter.hasParameterAnnotation(CurrentUserUuid.class) &&
//                parameter.getParameterType().isAssignableFrom(String.class);
//    }
//
//    @Override
//    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
//                                  NativeWebRequest request, WebDataBinderFactory factory) {
//        // header中获取用户token
//        String token = request.getHeader("Authorization");
//        // TODO 根据userId获取User信息，这里省略，直接创建一个User对象。
//        //解析token
//        String userid;
//        try {
//            Claims claims = Jwtutil.parseJWT(token);
//            userid = claims.getSubject();
//        } catch (Exception e) {
//            throw new RuntimeException("token非法");
//        }
//
//        //从redis中获取用户信息
//        String redisKey = "login:" + userid;
//        //反序列化
//        LoginUser loginUser = redisCache.getCacheObject(redisKey);
//        if (Objects.isNull(loginUser)) {
//            throw new RuntimeException("token失效,用户未登录");
//        }
//        return loginUser.getUser();
//    }
//
//}
//
